⚡ 30 秒速记

  • 路由管理地址到组件的映射
  • 状态存储管理共享数据和变更入口
  • 主动导航与浏览器后退都要通知界面
  • 路由参数变化不必然重建组件
  • 地址状态与业务状态各自明确归属

路由和状态管理都能驱动页面,但负责的问题不同:一个决定现在看哪页,一个决定业务数据是什么。 路由器维护当前位置并匹配组件,历史导航事件和主动跳转都要同步这份位置。共享存储则通过受控操作改变响应式数据。搜索条件若需要分享和后退恢复,可以放进地址;临时弹窗状态未必需要,别把所有界面细节都塞到同一个地方。

版本校准: 本文出现 Object.defineProperty、Dep、Watcher 和双端 Diff 时,主要描述 Vue 2 实现;Vue 3 使用 Proxy、effect 与新的渲染器路径。Vue 2 已于 2023-12-31 结束维护,新项目应以 Vue 3 为基线,旧项目参考 Vue 2 EOL 官方说明 制定迁移与安全策略。

# vue-router

Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单⻚面应用变得易如反 掌。

安装: vue add router 核心步骤:

  1. 步骤一:使用vue-router插件,router.js
 import Router from 'vue-router' 
 Vue.use(Router)
  1. 步骤二:创建Router实例,router.js
export default new Router({...})
  1. 步骤三:在根组件上添加该实例,main.js
import router from './router'

new Vue({
    router,
}).$mount("#app");
  1. 步骤四:添加路由视图,App.vue
<router-view></router-view>

导航

 <router-link to="/">Home</router-link> 
 <router-link to="/about">About</router-link>

# vue-router源码实现

  • 作为一个插件存在:实现VueRouter类和install方法
  • 实现两个全局组件:router-view用于显示匹配组件内容,router-link用于跳转
  • 监控url变化:监听hashchange或popstate事件
  • 响应最新url:创建一个响应式的属性current,当它改变时获取对应组件并显示

创建kvue-router.js

webapp
公众号
开发者导航
切换夜间模式
点击侧边栏上一篇
点击侧边栏下一篇
折叠侧边栏
收起全部